/**
 * 将时间解析成秒s
 * @param {*} arr
 * @returns
 */
const parseTime = (arr) => {
  const times = arr.split(':');
  const seconds = parseFloat(times[0]) * 60 + parseFloat(times[1]);
  return seconds;
}
/**
 * 解析lrc字符串
 * @param lrc
 * @returns
 */
const analysisLrc = (lrc) => {
  // 匹配两段时间中间的部分
  // 例如下面这段字符串解析时
  // `
  // [00:00.06]︿☆我不配☆︿
  // [au:]飒飒飒飒仨撒撒所所撒撒
  // [00:00.75]
  // `
  // 最后会被正则类似解析成以下部分
  // [
  //    [00:00.06]︿☆我不配☆︿
  //    [au:]飒飒飒飒仨撒撒所所撒撒
  // ]
  // [
  //    [00:00.75]
  // ]
  const matchLrcRegex = /\[\d+:\d{2}\.\d{2}\](.*?)(?=\[\d{2}:\d{2}\.\d{2}\]|$)/gs;
  // 匹配 [00:00.06] 时间后面的\n 如果有，则在下面filter忽略掉
  const matchLineBreakRegex = /\[\d+:\d{2}\.\d{2}\](?=\n)/g;
  // 使用正则表达式匹配并提取结果
  const matches = [...lrc.matchAll(matchLrcRegex)];
  // 匹配 非空值
  const matchNotLineBreak = matches.filter(item => {
    return !item[0].match(matchLineBreakRegex);
  });
  // 提取正确格式的值
  // 例如: `[00:00.06]︿☆我不配☆︿\n[au:]飒飒飒飒仨撒撒所所撒撒\n`
  const analysisMatch = matchNotLineBreak.map(item => item[0]);
  // 拆分数据成 [[00:00.06]︿☆我不配☆︿, [au:]飒飒飒飒仨撒撒所所撒撒] 这种格式, 并且忽略掉空字符
  const splitTimeAndOther = analysisMatch.map(item => {
    return item.split('\n').filter(item1 => item1);
  });
  const result = splitTimeAndOther.map(item => {
    // 带有时间的normalLrc肯定存在
    const normalLrc = item[0];
    const itemArr = normalLrc.split(']');
    // 组装成需要的数据格式
    const singleData = {
      time: parseTime(itemArr[0].substring(1)),
      value: item
    }
    return singleData
  })
  return result;
}

export {
  analysisLrc
}
